package java.com.webserver.http;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * HttpContext 封装当前服务器的有关的静态环境信息
 * -文件类型映射（mime-mapping）是静态环境信息
 */
public class HttpContext {
    /**
     * 全部用户共享的 文件类型映射 集合
     */
    private static Map<String, String> mimeMapping = new HashMap<>();

    static {
        initMimeMapping();
    }



    /**
     * 定义初始化的方法，封装 mimeMapping集合的初始化过程
     */
    private static void initMimeMapping() {
        Document doc = null;
        try {
            File file = new File("./config/web.xml");
            SAXReader reader = new SAXReader();
            doc = reader.read(file);
//            System.out.println(doc.asXML());
            Element root = doc.getRootElement();
            List<Element> elements = root.elements("mime-mapping");
            for (Element e : elements) {
//                System.out.println(e.asXML());
                String ext = e.elementTextTrim("extension");
                String type = e.elementTextTrim("mime-type");
                //System.out.println(ext+": "+type);
                mimeMapping.put(ext, type);

            }

        } catch (DocumentException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 根据文件的扩展名，检查其对应的媒体类型（mime type）
     * 如：ext是png 则返回 image/png
     * @param  ext  扩展名
     * @return   mime类型
     */
    public static String getMimeMapping(String ext) {
        return mimeMapping.get(ext);
    }

//    public static void main(String[] args) {
//        //JVM  加载HttpContext时候会自动初始化 mimeMapping
//        System.out.println(mimeMapping);
//    }
}
